home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue67 / Alfresco / TstFib.dpr < prev    next >
Encoding:
Text File  |  2001-02-03  |  1.3 KB  |  67 lines

  1. program TstFib;
  2.  
  3. {$apptype console}
  4.  
  5. uses
  6.   Windows, SysUtils, Classes;
  7.  
  8. var
  9.   FibCache : TList;
  10.  
  11. function SlowFibonacci(N : integer) : integer;
  12. begin
  13.   if (N <= 2) then
  14.     Result := 1
  15.   else
  16.     Result := SlowFibonacci(N-2) + SlowFibonacci(N-1);
  17. end;
  18.  
  19. procedure PrepareFibCache;
  20. var
  21.   i : integer;
  22. begin
  23.   FibCache := TList.Create;
  24.   FibCache.Count := 1001;
  25.   FibCache[1] := pointer(1);
  26.   FibCache[2] := pointer(1);
  27.   for i := 3 to 1000 do
  28.     FibCache[i] := pointer(-1);
  29. end;
  30.  
  31. function FastFibonacci(N : integer) : integer;
  32. begin
  33.   Result := integer(FibCache[N]);
  34.   if (Result = -1) then begin
  35.     Result := FastFibonacci(N-2) + FastFibonacci(N-1);
  36.     FibCache[N] := pointer(Result);
  37.   end;
  38. end;
  39.  
  40. var
  41.   i : integer;
  42.   StartTime : DWORD;
  43. begin
  44.   PrepareFibCache;
  45.  
  46.   (*
  47.   for i := 1 to 10 do
  48.     writeln(i:5, SlowFibonacci(i):10);
  49.  
  50.   for i := 1 to 10 do
  51.     writeln(i:5, FastFibonacci(i):10);
  52.   *)
  53.  
  54.   writeln('calculating 40th Fibonacci number (fast)...');
  55.   StartTime := GetTickCount;
  56.   i := FastFibonacci(40);
  57.   writeln('fast: ', i:10, '  time: ', GetTickCount - StartTime);
  58.  
  59.   writeln('calculating 40th Fibonacci number (slow)...');
  60.   StartTime := GetTickCount;
  61.   i := SlowFibonacci(40);
  62.   writeln('slow: ', i:10, '  time: ', GetTickCount - StartTime);
  63.  
  64.   writeln('Done, prees enter...');
  65.   readln;
  66. end.
  67.